ArchiveReader使用手册
1. 功能描述
ArchiveReader是一个独立的二进制,其主要功能包括两个方面:
将hyperchain上归档的数据重新restore到线上
提供状态证明功能
2. 使用方式
2.1 归档数据restore
在部署方面, 相比于hyperchain,ArchvieReader二进制只需要一份配置文件即可启动。而配置文件可以完全复用hyperchain的配置。
在使用方面, ArchiveReader的核心功能为线下数据restore和通过api接口查询restore到线上的数据,因此使用ArchiveReader需要首先准备线下数据,线下数据的来源即为hyperchain上归档以后的线下目录下的内容,具体的,一份合法的线下数据内容如下图所示:

上图为一个hyperchain-2.7.0归档过3次的节点的data/archive目录下的数据,其中的红色框圈起来的数据,是需要手动拷贝到ArchvieReader的namespaces/global/data/archive目录下的数据。即一个合法的ArchiveReader节点在启动前应该准备好如下的目录结构:

至此,ArchiveReader的线下数据准备完成,下面可以进行restore操作:首先 启动ArchiveReader,然后可以看到其namespaces/global/data目录下的结构为:

archive目录下新增了archive.record文件和genesis.meta文件。public目录下的结构和普通的vp节点的public目录下结构相同。
接下来, 用户就可以通过命令进行restore操作了 ,ArchiveReader上提供了restore的API,curl命令为:
curl localhost:8081 --data '[{"jsonrpc": "2.0", "id": 0, "method": "archive_restore", "params": ["0xf48816b2aaac6461be86b6256bf438de", true], "namespace": "global"}]'
接口说明:
接口名称 |
archive_restore |
||
|---|---|---|---|
参数说明 |
名称 |
类型 |
含义 |
filterID |
string |
预期恢 复的区块范 围对应的sn apshot标识 |
|
shouldSync |
bool |
是否同 步的等待返 回(true为 同步等待) |
|
返回值 |
如果第二个参数true, 则接口返回true即表示restore完成; |
||
如果为false,则需要通过archiv e_queryArchive接口获得结果;查询请 求为:如果成功,可以看到如下结果: |
当归档成功后,ArchiveReader的线上数据库中会有这一段数据,如图所示:

此时用户可以使用ArchiveReader暴露的读取数据的接口进行数据访问。
restore的使用限制条件!!!
整体上,ArchiveReader要求按照区块号 从小到大 的顺序 连续 进行restore,比如线下有多份归档数据(分别对应:0-15,15-20,20-40),那么用户需要按照先0-15,再15-20,最后20-40的顺序进行restore。过程中 不能出现 区块号的断档。
如果当前ArchiveReader没有任何数据,ArchiveReader并不要求一定要从0号开始restore,即上述的场景下,用户可以按照先15-20,再20-40的顺序进行restore,这样也是合法的。但是后续 不再允许 restore[0-15]了。
2.2 状态证明
参考《状态证明使用手册》
2.3 ArchiveReader支持接口
接口类型 |
接口名称 |
接口描述 |
|---|---|---|
交易接口 |
tx_getTransactionByHash |
根据交 易哈希值查询交易详情 |
tx_ getTransactionByBlockHashAndIndex |
根据区块哈 希及索引查询交易详情 |
|
tx_ge tTransactionByBlockNumberAndIndex |
根据区块号及 索引信息查询交易详情 |
|
tx_getTransactionsCount |
根据区块号及 索引信息查询交易详情 |
|
tx_getTxAvgTimeByBlockNumber |
查询指定区 块中交易平均处理时间 |
|
tx_getTransactionReceipt |
查询指定交易回执信息 |
|
tx_getBlockTransactionCountByHash |
根据区块 哈希查询区块交易数量 |
|
tx _getBlockTransactionCountByNumber |
根据区 块号查询区块交易数量 |
|
tx_getTransactionsVersion |
查询 平台当前的交易版本号 |
|
tx_getTransactionsWithLimit |
查询指定区块区间 的交易(可用于分页) |
|
tx_getTransactionsByTimeWithLimit |
查询指定时间区间内 的交易(可用于分页) |
|
tx_getTransactionsByExtraID |
查询 extraId为指定值的交易 |
|
tx_getTransactionsByFilter |
查 询符合过滤条件的交易 |
|
t x_getInvalidTransactionsWithLimit |
查询指定区块区 间的非法交易(可分页) |
|
tx _getInvalidTransactionByBlockHash |
查询非法交易列表(by block hash) |
|
tx_g etInvalidTransactionByBlockNumber |
查询非法交易列表(by block number) |
|
tx_getInvalidTransactionsCount |
查 询链上所有非法交易量 |
|
区块接口 |
block_latestBlock |
获取最新区块 |
block_getBlockByHash |
根据区块 的哈希值返回区块信息 |
|
block_getBlockByNumber |
根 据区块号返回区块信息 |
|
bloc k_getAvgGenerateTimeByBlockNumber |
根据区块区间计算 出区块的平均生成时间 |
|
block_getGenesisBlock |
查询创世区块号 |
|
block_getChainHeight |
查询最新区块号 |
|
block_getBlocksWithLimit |
查询指定区块区间的所 有区块(可用于分页) |